/**
 * Created by no1 on 2015/7/6.
 */

'use strict';
var DaoBase = require('./DaoBase');
var db = require('./models');
var F = require('../../function');

var util = require("util");

function WareDao(data) {
  data = data || {}
  data.model = data.model || db.ware;
  DaoBase.call(this, data);
}

util.inherits(WareDao, DaoBase);


/**
 * @todo 查询
 * @param pipeline
 * @param opt
 * @returns {{error, msg, data}|{error, msg}}
 */
WareDao.prototype.getByAggregate = function*(pipeline, opt) {

  if (!pipeline) return F.returnData(1, '没有参数.')
  let ret = yield this.model.aggregate(pipeline).exec();
  if (ret.errors) return F.returnData(1, ret.errors, ret);
  if (ret.length == 0) return F.returnData(1, '没有找到商品数据');
  return F.returnData(0, '查询成功.', ret)
};

/**
 * @todo 修改status
 * @param id
 * @param opt
 * @returns {{error, msg, data}|{error, msg}}
 */
WareDao.prototype.falseDelete = function*(id, opt) {
  if (!id) return F.returnData(1, '没有参数.')
  let ret = yield this.model.findOneAndUpdate({id: id}, {$set: {status: 0}}, {'new': true});
  if (!ret) return F.returnData(1, '没有找到商品')
  if (ret.errors) return F.returnData(1, ret.errors, ret._doc);
  return F.returnData(0, 'ok', ret)
};


/**
 *@ todo 订单完成一条,商品的buyNumber减1
 *@param  int  id  修改的商品id
 *@param  {Object}  opt 修改的参数
 */
WareDao.prototype.buyOne = function*(id, opt) {
  if (!id) return F.returnData(1, '没有参数.')
  let ret = yield this.model.findOneAndUpdate({id: id}, {$inc: {buyNumber: 1}}, {'new': true});
  if (!ret) return F.returnData(1, '没有找到商品')
  if (ret.errors) return F.returnData(1, ret.errors, ret._doc);
  return F.returnData(0, 'ok', ret)
};

/**
 * @todo 卖出商品
 * @param id
 * @param quantity
 * @param opt
 * @returns {{error, msg, data}|{error, msg}}
 */
WareDao.prototype.buySome = function*(id, quantity, opt) {
  if (quantity < 0) return F.returnData(1, '购买的数量有误');
  quantity || (quantity = 1);
  if (!id) return F.returnData(1, '没有参数');
  let ret = yield this.model.findOneAndUpdate({id: id}, {$inc: {buyNumber: quantity}}, {'new': true});
  if (!ret) return F.returnData(1, '没有找到商品')
  if (ret.errors) return F.returnData(1, ret.errors, ret._doc);
  return F.returnData(0, 'ok', ret)
};

/**
 *@ todo 订单完成一条,商品的buyNumber减1
 *@param  int  id  修改的商品id
 *@param  {Object}  opt 修改的参数
 */
WareDao.prototype.getOneByPopulate = function*(id, opt) {

  var ret = yield this.model.findOne({id: id}).populate('shops.shopInfo');//_id 2423dff34rd2324 id 112
  return F.returnData(0, 'ok', ret._doc)
};

module.exports = WareDao;